﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//using iAnywhere.Data.SQLAnywhere;
using System.Collections;
using System.Windows.Forms;
using System.Data;
using Oracle.DataAccess.Client;



namespace Biuro.Klasy
{
    public class databaseConnection
    {
        OracleConnection _conn;
        ArrayList kraje;
        OracleCommand cmd;
        DataSet set;
        OracleDataAdapter adapter;

        public OracleConnection Conn
        {
            get { return _conn; }
        }
        public databaseConnection(userData nowy)
        {
            //string _connString = "UID=dba;PWD=sql;DBF=D:\\inżynierka\\inzynierkaHR\\baza\\baza.db";
            string _connString = String.Format("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT={1})))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME={2})));User Id={3};Password={4};",
                nowy.Host, nowy.Port, nowy.Database, nowy.UserID, nowy.Password );
            //string _connString = String.Format("ENG={0};DBN={1};Uid={2};Pwd={3};Links=tcpip(Host={4});",
            //    nowy.Database, nowy.Database, nowy.UserID, nowy.Password, nowy.Host);
            _conn = new OracleConnection(_connString);
        }
        public bool czyPolaczony()
        {
            if (_conn.State == ConnectionState.Open)
                return true;
            else
                return false;
        }
        public void Polacz()
        {
            if (_conn.State != System.Data.ConnectionState.Open)
            {
                try
                {
                    _conn.Open();
                }
                catch (Exception exp)
                {
                    System.Windows.Forms.MessageBox.Show(exp.Message);
                }
            }
        }
        public void Polacz(userData nowy)
        {
            if (_conn.State != System.Data.ConnectionState.Open)
            {
                string _connString = String.Format("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT={1})))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME={2})));User Id={3};Password={4};",
                nowy.Host, nowy.Port, nowy.Database, nowy.UserID, nowy.Password);
    //            _conn.ConnectionString = String.Format("ENG={0};DBN={1};Uid={2};Pwd={3};Links=tcpip(Host={4});",
    //nowy.Database, nowy.Database, nowy.UserID, nowy.Password, nowy.Host);
                try
                {
                    _conn.Open();
                }
                catch (Exception exp)
                {
                    MessageBox.Show(exp.Message);
                }
            }
        }
        public void Rozlacz()
        {
            if (_conn.State != System.Data.ConnectionState.Closed)
            {
                try
                {
                    _conn.Close();
                }
                catch (Exception exp)
                {
                    MessageBox.Show(exp.Message);
                }
            }
        }
        public ArrayList PobierzKrajeZPustymPolem()
        {
            if (_conn.State == ConnectionState.Open)
            {
                kraje = null;
                kraje = new ArrayList();
                kraje.Add(new kraj(" ", -1));
                try
                {
                    cmd = new OracleCommand("SELECT id, nazwa FROM kraj", _conn);
                    OracleDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        kraje.Add(new kraj(dr["nazwa"].ToString(), Convert.ToInt32(dr["id"])));
                    }
                }
                catch (Exception exp) { }
                return kraje;
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return null;
            }
        }
        public ArrayList PobierzKraje()
        {
            if (_conn.State == ConnectionState.Open)
            {
                kraje = null;
                kraje = new ArrayList();
                try
                {
                    cmd = new OracleCommand("SELECT id, nazwa FROM kraj", _conn);
                    OracleDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        kraje.Add(new kraj(dr["nazwa"].ToString(), Convert.ToInt32(dr["id"])));
                    }
                }
                catch (Exception exp) { }
                return kraje;
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return null;
            }
        }
        public ArrayList PobierzTransport()
        {
            if (_conn.State == ConnectionState.Open)
            {
                kraje = null;
                kraje = new ArrayList();
                try
                {
                    cmd = new OracleCommand("SELECT id, nazwa FROM transport", _conn);
                    OracleDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        kraje.Add(new kraj(dr["nazwa"].ToString(), Convert.ToInt32(dr["id"])));
                    }
                }
                catch (Exception exp) { }
                return kraje;
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return null;
            }
        }
        public DataTable ZwrocTabele(string Zapytanie)
        {
            if (_conn.State == ConnectionState.Open)
            {
                try
                {
                    set = new DataSet();
                    adapter = new OracleDataAdapter(Zapytanie, _conn);
                    adapter.Fill(set);
                }
                catch(Exception exp)
                {
                    MessageBox.Show(exp.Message);
                    return new DataTable();
                }
                return set.Tables[0];
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return null;
            }
        }
        public bool SprawdzCzyKlientIstnieje(Int64 id)
        {
            if (_conn.State == ConnectionState.Open)
            {
            cmd = new OracleCommand("SELECT * FROM klient WHERE pesel = " + id.ToString(), _conn);
            OracleDataReader dr = cmd.ExecuteReader();
            MessageBox.Show(dr.FieldCount.ToString());
            if (dr.HasRows)
                return true;
            else
                return false;
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return false;
            }
        }
        public ArrayList PobierzKlienta(Int64 id)
        {
            if (_conn.State == ConnectionState.Open)
            {
                ArrayList daneKlienta = new ArrayList();
                try
                {
                    cmd = new OracleCommand(String.Format("SELECT imie, nazwisko, miejscowosc, kod_pocztowy, pesel, telefon, email, ulica FROM klient WHERE id = {0}",id), _conn);
                    OracleDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        daneKlienta.Add(dr["imie"].ToString());
                        daneKlienta.Add(dr["nazwisko"].ToString());
                        daneKlienta.Add(dr["miejscowosc"].ToString());
                        daneKlienta.Add(dr["kod_pocztowy"].ToString());
                        daneKlienta.Add(dr["pesel"].ToString());
                        daneKlienta.Add(dr["telefon"].ToString());
                        daneKlienta.Add(dr["email"].ToString());
                        daneKlienta.Add(dr["ulica"].ToString());
                    }
                }
                catch (Exception exp)
                { MessageBox.Show(exp.Message); }
                return daneKlienta;
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return null;
            }
        }
        public ArrayList PobierzWycieczke(Int64 id)
        {
            if (_conn.State == ConnectionState.Open)
            {
                ArrayList daneWycieczki = new ArrayList();
                try
                {
                    cmd = new OracleCommand(String.Format("SELECT imie, nazwisko, miejscowosc, kod_pocztowy, pesel, telefon, email FROM klient WHERE id = {0}", id), _conn);
                    OracleDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        daneWycieczki.Add(dr["imie"].ToString());
                        daneWycieczki.Add(dr["nazwisko"].ToString());
                        daneWycieczki.Add(dr["miejscowosc"].ToString());
                        daneWycieczki.Add(dr["kod_pocztowy"].ToString());
                        daneWycieczki.Add(dr["pesel"].ToString());
                        daneWycieczki.Add(dr["telefon"].ToString());
                        daneWycieczki.Add(dr["email"].ToString());
                    }
                }
                catch (Exception exp)
                { 
                    MessageBox.Show(exp.Message); 
                }
                return daneWycieczki;
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return null;
            }
        }
        public int DodajKlienta(string imie, string nazwisko, string miejscowosc, string kod_pocztowy, Int64 pesel, string telefon, string email, string ulica)
        {
            if (_conn.State == ConnectionState.Open)
            {
                string zapytanie;
                if (ulica == "")
                {
                    if (email != "")
                        zapytanie = String.Format("INSERT INTO klient(imie,nazwisko,miejscowosc,kod_pocztowy,pesel,telefon,email) VALUES(\'{0}\',\'{1}\',\'{2}\',\'{3}\',{4},\'{5}\',\'{6}\')", imie, nazwisko, miejscowosc, kod_pocztowy, pesel.ToString(), telefon, email);
                    else
                        zapytanie = String.Format("INSERT INTO klient(imie,nazwisko,miejscowosc,kod_pocztowy,pesel,telefon) VALUES(\'{0}\',\'{1}\',\'{2}\',\'{3}\',{4},\'{5}\')", imie, nazwisko, miejscowosc, kod_pocztowy, pesel.ToString(), telefon);
                }
                else
                {
                     if (email != "")
                        zapytanie = String.Format("INSERT INTO klient(imie,nazwisko,miejscowosc,kod_pocztowy,pesel,telefon,email,ulica) VALUES(\'{0}\',\'{1}\',\'{2}\',\'{3}\',{4},\'{5}\',\'{6}\',\'{7}\')", imie, nazwisko, miejscowosc, kod_pocztowy, pesel.ToString(), telefon, email, ulica);
                    else
                        zapytanie = String.Format("INSERT INTO klient(imie,nazwisko,miejscowosc,kod_pocztowy,pesel,telefon, ulica) VALUES(\'{0}\',\'{1}\',\'{2}\',\'{3}\',{4},\'{5}\',\'{6}\')", imie, nazwisko, miejscowosc, kod_pocztowy, pesel.ToString(), telefon, ulica);
                }
                cmd = new OracleCommand(zapytanie, _conn);
                return Convert.ToInt32(cmd.ExecuteNonQuery());
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return 0;
            }
        }
        public int DodajKraj(string nazwa, string kontynent, string waluta, string opis)
        {
            if (_conn.State == ConnectionState.Open)
            {
                string zapytanie;
                if (opis == "")
                {
                    zapytanie = String.Format("INSERT INTO kraj(nazwa,kontynent,waluta) VALUES(\'{0}\',\'{1}\',\'{2}\')", nazwa, kontynent, waluta);
                }
                else
                {
                    zapytanie = String.Format("INSERT INTO kraj(nazwa,kontynent,waluta,opis) VALUES(\'{0}\',\'{1}\',\'{2}\',\'{3}\')", nazwa, kontynent, waluta, opis);
                }
                cmd = new OracleCommand(zapytanie, _conn);
                return Convert.ToInt32(cmd.ExecuteNonQuery());
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return 0;
            }
        }
        public int DodajTransport(string nazwa, string przewoznik, string opis)
        {
            if (_conn.State == ConnectionState.Open)
            {
                string zapytanie;
                if (opis == "")
                {
                    zapytanie = String.Format("INSERT INTO transport(nazwa,przewoznik) VALUES(\'{0}\',\'{1}\')", nazwa, przewoznik);
                }
                else
                {
                    zapytanie = String.Format("INSERT INTO transport(nazwa,przewoznik,opis) VALUES(\'{0}\',\'{1}\',\'{2}\')", nazwa, przewoznik, opis);
                }
                cmd = new OracleCommand(zapytanie, _conn);
                return Convert.ToInt32(cmd.ExecuteNonQuery());
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return 0;
            }
        }
        public int DodajPromocje(string nazwa, int wartosc, string opis)
        {
            if (_conn.State == ConnectionState.Open)
            {
                //try
                //{
                    string zapytanie;
                    if (opis == "")
                    {
                        zapytanie = String.Format("INSERT INTO promocja(nazwa,wartosc) VALUES(\'{0}\',{1})", nazwa, wartosc);
                    }
                    else
                    {
                        zapytanie = String.Format("INSERT INTO promocja(nazwa,wartosc,opis) VALUES(\'{0}\',{1},\'{2}\')", nazwa, wartosc, opis);
                    }
                    Clipboard.SetText(zapytanie);
                    cmd = new OracleCommand(zapytanie, _conn);
                    return Convert.ToInt32(cmd.ExecuteNonQuery());
                //}
                //catch (Exception exp)
                //{
                //    MessageBox.Show(exp.Message);
                //    return 0;
                //}
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return 0;
            }
        }
        public int UsunRezerwacje(int RezerwacjaID)
        {
            if (_conn.State == ConnectionState.Open)
            {
                try
                {
                    string zapytanie;
                    zapytanie = String.Format("DELETE FROM zamowienia_uslugi WHERE zam_id = {0}", RezerwacjaID);
                    cmd = new OracleCommand(zapytanie, _conn);
                    cmd.ExecuteNonQuery();
                    zapytanie = String.Format("DELETE FROM rezerwacja WHERE id = {0}",RezerwacjaID);
                    cmd = new OracleCommand(zapytanie, _conn);
                    return Convert.ToInt32(cmd.ExecuteNonQuery());
                }
                catch (Exception exp)
                {
                    MessageBox.Show(exp.Message);
                    return 0;
                }
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return 0;
            }
        }
        public int DodajTyp(string nazwa, string opis)
        {
            if (_conn.State == ConnectionState.Open)
            {
                string zapytanie;
                if (opis == "")
                {
                    zapytanie = String.Format("INSERT INTO wycieczka_typ(nazwa) VALUES(\'{0}\')", nazwa);
                }
                else
                {
                    zapytanie = String.Format("INSERT INTO wycieczka_typ(nazwa,opis) VALUES(\'{0}\',\'{1}\')", nazwa, opis);
                }
                cmd = new OracleCommand(zapytanie, _conn);
                return Convert.ToInt32(cmd.ExecuteNonQuery());
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return 0;
            }
        }
        public int DodajKurort(string nazwa, string opis, int krajID)
        {
            if (_conn.State == ConnectionState.Open)
            {
                try
                {
                    string zapytanie;
                    if (opis == "")
                    {
                        zapytanie = String.Format("INSERT INTO kurort(nazwa,kra_id) VALUES(\'{0}\',{1})", nazwa,krajID);
                    }
                    else
                    {
                        zapytanie = String.Format("INSERT INTO kurort(nazwa,kra_id,opis) VALUES(\'{0}\',{1},\'{2}\')", nazwa,krajID, opis);
                    }
                    cmd = new OracleCommand(zapytanie, _conn);
                    return Convert.ToInt32(cmd.ExecuteNonQuery());
                }
                catch (Exception exp)
                {
                    MessageBox.Show(exp.Message);
                    return 0;
                }
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return 0;
            }
        }
        public int DodajUsluge(string nazwa, double cena, string opis)
        {
            if (_conn.State == ConnectionState.Open)
            {
                string zapytanie;
                if (opis == "")
                {
                    zapytanie = String.Format("INSERT INTO usluga(nazwa,cena) VALUES(\'{0}\',{1})", nazwa, cena);
                }
                else
                {
                    zapytanie = String.Format("INSERT INTO usluga(nazwa,cena,opis) VALUES(\'{0}\',{1},\'{2}\')", nazwa, cena, opis);
                }
                cmd = new OracleCommand(zapytanie, _conn);
                return Convert.ToInt32(cmd.ExecuteNonQuery());
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return 0;
            }
        }
        public int wyzywienie(string nazwa, int ilosc_posilkow, double cena)
        {
            if (_conn.State == ConnectionState.Open)
            {
                string zapytanie;
                zapytanie = String.Format("INSERT INTO wyzywienie(nazwa,ilosc_posilkow,cena) VALUES(\'{0}\',{1},{2})", nazwa, ilosc_posilkow, cena);
                cmd = new OracleCommand(zapytanie, _conn);
                return Convert.ToInt32(cmd.ExecuteNonQuery());
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return 0;
            }
        }
        public int EdytujKlienta(int id, string imie, string nazwisko, string miejscowosc, string kod_pocztowy, Int64 pesel, string telefon, string email, string ulica)
        {
            if (_conn.State == ConnectionState.Open)
            {
                string zapytanie;
                if (ulica == "")
                {
                    if (email != "")
                        zapytanie = String.Format("UPDATE klient SET imie =\'{0}\', nazwisko = \'{1}\', miejscowosc = \'{2}\', kod_pocztowy = \'{3}\', pesel = {4},telefon = \'{5}\', email = \'{6}\' WHERE id = {7}", imie, nazwisko, miejscowosc, kod_pocztowy, pesel.ToString(), telefon, email, id.ToString());
                    else
                        zapytanie = String.Format("UPDATE klient SET imie =\'{0}\', nazwisko = \'{1}\', miejscowosc = \'{2}\', kod_pocztowy = \'{3}\', pesel = {4},telefon = \'{5}\'  WHERE id = {6}", imie, nazwisko, miejscowosc, kod_pocztowy, pesel.ToString(), telefon, id.ToString());
                }
                else
                {
                    if (email != "")
                        zapytanie = String.Format("UPDATE klient SET imie =\'{0}\', nazwisko = \'{1}\', miejscowosc = \'{2}\', kod_pocztowy = \'{3}\', pesel = {4},telefon = \'{5}\', email = \'{6}\', ulica = \'{8}\' WHERE id = {7}", imie, nazwisko, miejscowosc, kod_pocztowy, pesel.ToString(), telefon, email, id.ToString(), ulica);
                    else
                        zapytanie = String.Format("UPDATE klient SET imie =\'{0}\', nazwisko = \'{1}\', miejscowosc = \'{2}\', kod_pocztowy = \'{3}\', pesel = {4},telefon = \'{5}\', ulica = \'{7}\'  WHERE id = {6}", imie, nazwisko, miejscowosc, kod_pocztowy, pesel.ToString(), telefon, id.ToString(), ulica);
                }
                cmd = new OracleCommand(zapytanie, _conn);
                return Convert.ToInt32(cmd.ExecuteNonQuery());
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return 0;
            }
        }
        public int LiczbaWolnychMiejsc(int WycieczkaId)
        {
            if (_conn.State == ConnectionState.Open)
            {
                int id = 0;
                try
                {
                    cmd = new OracleCommand(String.Format("SELECT pozostalo FROM liczba_wolnych_miejsc WHERE id= {0}", WycieczkaId), _conn);
                    id = Convert.ToInt32(cmd.ExecuteScalar());
                    //id = (int)(!Convert.IsDBNull(result) ? result : 0);
                }
                catch (Exception exp)
                {
                    MessageBox.Show(exp.Message);
                }
                return id;
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return 0;
            }
        }
        public double CenaZaMiejsce(int WycieczkaId)
        {
            if (_conn.State == ConnectionState.Open)
            {
                double id = 0;
                try
                {
                    cmd = new OracleCommand(String.Format("SELECT w.cena - (NVL(p.wartosc,0)/100)*w.cena cena FROM wycieczka w LEFT OUTER JOIN promocja p ON w.pro_id = p.id WHERE w.id= {0}", WycieczkaId), _conn);
                    object result = cmd.ExecuteScalar();
                    id = Double.Parse(result.ToString());
                }
                catch (Exception exp)
                {
                    MessageBox.Show(exp.Message);
                }
                return id;
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return 0;
            }
        }
        public int DodajRezerwacje(int IdWycieczki, int IdPracownika, int IdKlienta,int idWyzywienia, int IloscMiejsc, double KwotaDoZaplaty,List<int> uslugiDodatkowe)
        {
            if (_conn.State == ConnectionState.Open)
            {
                try
                {
                    string zapytanie;
                    zapytanie = String.Format("INSERT INTO REZERWACJA(wyc_id,wyz_id,kon_id,kli_id,ilosc_miejsc,kwota_do_zaplaty) VALUES({0},{1},{2},{3},{4},{5})", IdWycieczki, idWyzywienia, IdPracownika, IdKlienta, IloscMiejsc, KwotaDoZaplaty);
                    cmd = new OracleCommand(zapytanie, _conn);
                    int tmp = Convert.ToInt32(cmd.ExecuteNonQuery());
                    int current_rez = PobierzMaxIdRezerwacji();
                    foreach (int usluga in uslugiDodatkowe)
                    {
                        zapytanie = String.Format("INSERT INTO zamowienia_uslugi(id, usl_id) VALUES({0},{1})", current_rez, usluga);
                        cmd = new OracleCommand(zapytanie, _conn);
                        cmd.ExecuteNonQuery();
                    }
                    return tmp;
                }
                catch (Exception exp)
                {
                    MessageBox.Show(exp.Message);
                    return 0;
                }
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return 0;
            }
        }
        public int DodajWycieczke(int HotelID, int TypID, int PromocjaID, int IloscMiejsc,string Nazwa,  DateTime data_wyjazdu, DateTime data_powrotu, double Cena, string Opis, List<int> uslugiDodatkowe)
        {
            if (_conn.State == ConnectionState.Open)
            {
                try
                {
                    string promo;
                    if (PromocjaID == -1)
                        promo = "NULL";
                    else
                        promo = PromocjaID.ToString();
                    string zapytanie;
                    if (Opis == "")
                    {
                        zapytanie = String.Format("INSERT INTO wycieczka(pro_id,hot_id,wyc_id,nazwa,data_wyjazdu,data_powrotu,ilosc_miejsc,cena) VALUES({0},{1},{2},\'{3}\',\'{4}\',\'{5}\',{6},{7})", promo, HotelID, TypID, Nazwa, data_wyjazdu.ToShortDateString(), data_powrotu.ToShortDateString(), IloscMiejsc, Cena);
                    }
                    else
                    {
                        zapytanie = String.Format("INSERT INTO wycieczka(pro_id,hot_id,wyc_id,nazwa,data_wyjazdu,data_powrotu,ilosc_miejsc,cena,opis) VALUES({0},{1},{2},\'{3}\',\'{4}\',\'{5}\',{6},{7},\'{8}\')", promo, HotelID, TypID, Nazwa, data_wyjazdu.ToShortDateString(), data_powrotu.ToShortDateString(), IloscMiejsc, Cena,Opis);
                    }
                    cmd = new OracleCommand(zapytanie, _conn);
                    int tmp = Convert.ToInt32(cmd.ExecuteNonQuery());
                    int current_trip = PobierzMaxIdWycieczki();
                    foreach (int usluga in uslugiDodatkowe)
                    {
                        zapytanie = String.Format("INSERT INTO wycieczki_uslugi(wyc_id, id) VALUES({0},{1})", current_trip, usluga);
                        cmd = new OracleCommand(zapytanie, _conn);
                        cmd.ExecuteNonQuery();
                    }
                    return tmp;
                }
                catch (Exception exp)
                {
                    MessageBox.Show(exp.Message);
                    return 0;
                }
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return 0;
            }
        }

        public List<usluga> PobierzUslugi(int RezerwacjaID)
        {
            List<usluga> tmp = new List<usluga>();
            if (_conn.State == ConnectionState.Open)
            {
                try
                {
                    string zapytanie;

                    zapytanie = String.Format("SELECT nazwa, cena FROM usluga u, zamowienia_uslugi z WHERE z.usl_id = u.id AND z.zam_id = {0}", RezerwacjaID.ToString());

                    cmd = new OracleCommand(zapytanie, _conn);
                    OracleDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        tmp.Add(new usluga(dr["nazwa"].ToString(), Double.Parse(dr["cena"].ToString())));
                    }
                    
                    return tmp;
                }
                catch (Exception exp)
                {
                    MessageBox.Show(exp.Message);
                    return tmp;
                }
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return tmp;
            }
        }

        public int DodajHotel(int TransportID, int KurortID, string Nazwa, string Miejscowosc, int standard, string Opis, List<wyzywienie> Wyzywienie)
        {
            if (_conn.State == ConnectionState.Open)
            {
                try
                {
                    string zapytanie;
                    if (Opis == "")
                    {
                        zapytanie = String.Format("INSERT INTO hotel(tra_id,kur_id,nazwa,miejscowosc,standard) VALUES({0},{1},\'{2}\',\'{3}\',{4})",TransportID,KurortID,Nazwa,Miejscowosc,standard);
                    }
                    else
                    {
                        zapytanie = String.Format("INSERT INTO hotel(tra_id,kur_id,nazwa,miejscowosc,standard,opis) VALUES({0},{1},\'{2}\',\'{3}\',{4},\'{5}\')", TransportID, KurortID, Nazwa, Miejscowosc, standard,Opis);
                    }

                    cmd = new OracleCommand(zapytanie, _conn);
                    int tmp = Convert.ToInt32(cmd.ExecuteNonQuery());
                    int current_hotel = PobierzMaxIdHotelu();
                    MessageBox.Show(current_hotel.ToString());
                    foreach (wyzywienie posilek in Wyzywienie)
                    {
                        try
                        {
                            OracleCommand cmd2;
                            zapytanie = String.Format("INSERT INTO wyzywienie(hot_id, nazwa,ilosc_posilkow,cena) VALUES({0},\'{1}\',{2},{3})", current_hotel, posilek.Nazwa, posilek.IloscPosilkow, posilek.Cena);

                            cmd2 = new OracleCommand(zapytanie, _conn);
                            cmd2.ExecuteNonQuery();
                        }
                        catch (Exception exp)
                        {
                            MessageBox.Show(exp.Message);
                        }
                    }
                    Clipboard.SetText(zapytanie);
                    return tmp;
                }
                catch (Exception exp)
                {
                    MessageBox.Show(exp.Message);
                    return 0;
                }
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return 0;
            }
        }
        public ArrayList PobierzPromocje()
        {
            if (_conn.State == ConnectionState.Open)
            {
                ArrayList promocje = null;
                promocje = new ArrayList();
                promocje.Add(new promocja(" ", -1, 0));
                try
                {
                    cmd = new OracleCommand("SELECT  id, nazwa, wartosc FROM promocja", _conn);
                    OracleDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        promocje.Add(new promocja(dr["nazwa"].ToString(), Convert.ToInt32(dr["id"]), Convert.ToInt32(dr["wartosc"])));
                    }
                }
                catch (Exception exp)
                {
                    MessageBox.Show(exp.Message);
                }
                return promocje;
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return null;
            }
        }
        public ArrayList PobierzHotele()
        {
            if (_conn.State == ConnectionState.Open)
            {
                ArrayList hotele = null;
                hotele = new ArrayList();
                try
                {
                    cmd = new OracleCommand("SELECT  id, nazwa FROM hotel", _conn);
                    OracleDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        hotele.Add(new kraj(dr["nazwa"].ToString(), Convert.ToInt32(dr["id"])));
                    }
                }
                catch (Exception exp) { MessageBox.Show(exp.Message); }
                return hotele;
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return null;
            }
        }
        public ArrayList PobierzTypy()
        {
            if (_conn.State == ConnectionState.Open)
            {
                ArrayList hotele = null;
                hotele = new ArrayList();
                try
                {
                    cmd = new OracleCommand("SELECT id, nazwa FROM wycieczka_typ", _conn);
                    OracleDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        hotele.Add(new kraj(dr["nazwa"].ToString(), Convert.ToInt32(dr["id"])));
                    }
                }
                catch (Exception exp) { MessageBox.Show(exp.Message); }
                return hotele;
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return null;
            }
        }
        public ArrayList PobierzKurorty()
        {
            if (_conn.State == ConnectionState.Open)
            {
                ArrayList hotele = null;
                hotele = new ArrayList();
                try
                {
                    cmd = new OracleCommand("SELECT id, nazwa FROM kurort", _conn);
                    OracleDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        hotele.Add(new kraj(dr["nazwa"].ToString(), Convert.ToInt32(dr["id"])));
                    }
                }
                catch (Exception exp) { MessageBox.Show(exp.Message); }
                return hotele;
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return null;
            }
        }
        public int PobierzIdKonsultanta(string UserName)
        {
            if (_conn.State == ConnectionState.Open)
            {
                int id = 0;
                try
                {
                    cmd = new OracleCommand(String.Format("SELECT id FROM konsultant WHERE lower(nazwa) = \'{0}\'", UserName), _conn);
                    id = Convert.ToInt32(cmd.ExecuteScalar());
                }
                catch (Exception exp)
                {
                    MessageBox.Show(exp.Message);
                }
                return id;
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return 0;
            }
        }
        private int PobierzMaxIdRezerwacji()
        {
            if (_conn.State == ConnectionState.Open)
            {
                int id = 0;
                try
                {
                    cmd = new OracleCommand(String.Format("SELECT MAX(id) FROM rezerwacja"),_conn);
                    id = Convert.ToInt32(cmd.ExecuteScalar());
                }
                catch (Exception exp)
                {
                    MessageBox.Show(exp.Message);
                }
                return id;
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return 0;
            }
        }
        public int PobierzMaxIdHotelu()
        {
            if (_conn.State == ConnectionState.Open)
            {
                int id = 0;
                try
                {
                    cmd = new OracleCommand(String.Format("SELECT MAX(id) FROM hotel"),_conn);
                    id = Convert.ToInt32(cmd.ExecuteScalar());
                    //id = (int)(!Convert.IsDBNull(result) ? result : 0);
                    //id = result;
                }
                catch (Exception exp)
                {
                    MessageBox.Show(exp.Message);
                }
                return id;
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return 0;
            }
        }
        private int PobierzMaxIdWycieczki()
        {
            if (_conn.State == ConnectionState.Open)
            {
                int id = 0;
                try
                {
                    cmd = new OracleCommand(String.Format("SELECT MAX(id) FROM wycieczka"), _conn);
                    id = Convert.ToInt32(cmd.ExecuteScalar());
                }
                catch (Exception exp)
                {
                    MessageBox.Show(exp.Message);
                }
                return id;
            }
            else
            {
                MessageBox.Show("Brak połączenia z bazą danych");
                return 0;
            }
        }
    }
}
